package awk.proxy;

import awk.model.animal.Animal;
import awk.model.animal.Dog;
import lombok.Getter;
import lombok.Setter;

/**
 * 狗狗的静态代理类
 */
@Setter
@Getter
public class StaticProxy implements Animal {

    private Dog dog;

    @Override
    public void sleep() {
        //系统级业务
        System.out.println("主人在召唤");
        dog.sleep();

        //系统级业务
        System.out.println("主人离开");
    }

    @Override
    public void eat(String food) {
        //系统级业务
        System.out.println("主人在召唤");
        dog.eat(food);
        //系统级业务
        System.out.println("主人离开");
    }

    @Override
    public void eat() {
        //系统级业务
        System.out.println("主人在召唤");
        dog.eat();
        //系统级业务
        System.out.println("主人离开");
    }

    /**
     * 我们发现的问题
     * 01：代码冗余
     * 02：把冗余的代码提取成公共的方法
     * 03：有可能小猫咪也有这些方法
     * 04：提取成一个工具类中的方法
     * 05：现在有一个小猫咪 也需要执行 sleep和eat 以及系统级业务方法
     * 06：我们又得创建一个小猫咪对应的代理类
     * 07：动物有很多  ，难道需要我们创建N个代理类吗？？肯定！
     */
}
